
var store_tiporubro;
var store_rubro;
var store_editor;

Ext.onReady(function()
{

    store_tiporubro = new Ext.data.ArrayStore({
        fields : [ 'Id', 'tipoRubro' ],
        data   : [[0, 'Ingreso'],
                  [1, 'Egreso']
                 ]
    });

    store_rubro = new X.store.Json({
        fields : [
            'codigo',
            'codigoRubro',
            'nombreRubro'
        ]
    });
    store_rubro.addListener('load', function(){
        Ext.getCmp('filtroRubro').clearValue();
        for (var i=0; i<this.getCount(); i++){
            record = this.getAt(i);
            record.set('nombreRubro', record.get('codigo')+
                                      ' - '+record.get('nombreRubro'));
        }
    });

    store_editor = new X.store.Json({
        url    : '/resumen/ajax-filtro',
        fields : [
            'nombreRubro',
            'numeroComprobante',
            'tipoRubro',
            'cantidad',
            'concepto',
            'fechaMovimiento',
            'observaciones',
            'monto',
            'chequeOrden',
            'numeroSolicitud'
        ]
    });

    store_editor.addListener('load', function(store, records, options){
        try{
            var sum = 0;
            for (var i=0; i< records.length; i++){
                sum += parseInt(records[i].get('monto'));
            }
            Ext.getCmp('total').setValue(sum);
        }
        catch(e){
            X.msg.FailureJs(e.message);
        }
    });

    // form invisible para hacer el submit desde el campo filtroTipo
    var formSubmitRubro = new Ext.form.FormPanel({
        renderTo : 'layout_content',
        hidden   : true
    });

    var grid = new X.grid.GridPanel({
        id        : 'editor',
        height    : 240,
        width     : 855,
        store     : store_editor,
        useTbar   : false,
        useBbar   : false,

        columns:[
            new X.column.Number ({header: 'Comprobante N°',  width:  95,
                                  dataIndex: 'numeroComprobante'}),
     //     new X.column.Text   ({header: 'Cantidad',        width:  60, dataIndex: 'cantidad'}),
            new X.column.Text   ({header: 'Solicitud N°',    width:  80, 
            					 dataIndex: 'numeroSolicitud'}),
            new X.column.Text   ({header: 'A la orden de',   width:  140, 
            	                 dataIndex: 'chequeOrden'}),
            new X.column.Date   ({header: 'Fecha',         width:  70,
                                  dataIndex: 'fechaMovimiento'}),
            new X.column.Text   ({header: 'Observaciones', width: 180,
                                  dataIndex: 'observaciones'}),
            new X.column.Text   ({header: 'Concepto', width: 180,
                                  dataIndex: 'concepto'}),
            new X.column.Money  ({header: 'Monto',         width: 98,
                                  dataIndex: 'monto'})
        ]
    });

    new X.form.FormPanel2({
        title            : 'Generar resumen de movimientos',
        submitButtonText : 'Generar',
        returnButtonText : 'Cancelar',
        submitUrl        : '/resumen/ajax-crear', //Generar el pdf
        returnUrl        : '/resumen/pdf',      //Volver al menu inicial
        width            : 900,
        height           : 490,
        labelWidth       : 70,
        layout           : 'absolute',

        items:[
            new Ext.form.FieldSet({title:'Movimiento', x: 10, y: 5, width: 470 , height: 100, items:
            [
                new X.field.Hidden({ id:'editorRows' }),
                new X.field.Combo({
                    id           : 'filtroTipo',
                    hiddenName   : 'tipoRubro',
                    fieldLabel   : 'Tipo',
                    valueField   : 'Id',
                    displayField : 'tipoRubro',
                    width        : 250,
                    store        : store_tiporubro,
                    listeners    :{
                        select: actualizar_rubros
                    }
                }),
                
                new X.field.Combo ({
                        id           : 'filtroRubro',
                        hiddenName   : 'codigoRubro',
                        fieldLabel   : 'Rubro',
                        valueField   : 'codigoRubro',
                        displayField : 'nombreRubro',
                        editable     : true,
                        width        : 250,
                        store        : store_rubro,
                        listeners    :{
                            select: function ( combo, record, index ) {
                                Ext.getCmp('nombre').setValue(record.get('nombreRubro'));
                            }
                        }
                 }),
                 new X.field.Hidden({ id:'nombre' })
            ]}),
            new Ext.form.FieldSet({title:'Búsqueda de movimientos', x: 500, y: 5, width: 380, height: 100, layout:'absolute', items:
            [
                { layout:'form', x: 10, y: 0 , items:[
                    new X.field.Date ({fieldLabel:'Fecha Inicial', id:'filtroInicial', width:100, 
                                       vtype: 'daterange', endDateField:'filtroFinal', allowBlank: true,
                                       listeners: { 
                                           change: function(){ Ext.getCmp('listar').enable()},
                                           select: function(){ Ext.getCmp('listar').enable()}
                                       }
                    }),
                    new X.field.Date ({fieldLabel:'Fecha Final',   id:'filtroFinal',   width:100,
                                       vtype: 'daterange', startDateField:'filtroInicial', maxValue: new Date(), allowBlank: true,
                                       listeners: { 
                                           change: function(){ Ext.getCmp('listar').enable()},
                                           select: function(){ Ext.getCmp('listar').enable()}
                                       }
                    }),
                ]},
                {layout:'form', x: 225, y: 26, items:[
                    new Ext.Button   ({text:'Listar', id: 'listar', width:80, handler:cargar_grilla, disabled: true })
                ]}
            ]}),
            new Ext.form.FieldSet({title:'Resultados', x: 10, y: 115,width: 870,items:[
                grid,
            ]}),
            {
                layout: 'form', x: 10, y:395, labelWidth:40, items:[
                    new X.field.Number({fieldLabel:'Total',  id:'total', width:150, readOnly: true}),
                ]
            }
        ]
    });

    function actualizar_rubros(){

        formSubmitRubro.getForm().submit({
            url       : '/resumen/ajax-listar',
            waitTitle : 'Aguarde un momento.',
            waitMsg   : 'Cargando los rubros...',
            params    : {
                tipo : Ext.getCmp('filtroTipo').getValue()
            },

            success : function(form, action){
                try{
                    if (action.result){
                        store_rubro.setJson(Ext.encode(action.result));
                    }
                }
                catch(e){ X.msg.FailureJs(e.message); }
            },
            failure : function(form, action){
                try{
                    if (action.failureType === Ext.form.Action.SERVER_INVALID){
                        X.msg.Failure(action.result.msg);
                    }
                    else X.msg.Failure('respuesta inválida del servidor');
                }
                catch(e){ X.msg.FailureJs(e.message); }
            }
        });
    }

    // ajax para cargar los datos filtradosr
    function cargar_grilla(){   
        store_editor.setBaseParam('filtroInicial', Ext.getCmp('filtroInicial').getValue());
        store_editor.setBaseParam('filtroFinal',   Ext.getCmp('filtroFinal')  .getValue());
        store_editor.setBaseParam('filtroRubro',   Ext.getCmp('filtroRubro')  .getValue());
        store_editor.reload();
    }

    // validacion de filtroInicial y filtroFinal
    Ext.apply(Ext.form.VTypes, {
        daterangeText : 'Formato incorrecto',
        daterange     : function(val, field) {
            var date = field.parseDate(val);

            if(!date){
                return false;
            }
            if (field.startDateField) {
                var start = Ext.getCmp(field.startDateField);
                if (!start.maxValue || (date.getTime() != start.maxValue.getTime())) {
                    start.setMaxValue(date);
                    start.validate();
                }
            }
            else if (field.endDateField) {
                var end = Ext.getCmp(field.endDateField);
                if (!end.minValue || (date.getTime() != end.minValue.getTime())) {
                    end.setMinValue(date);
                    end.validate();
                }
            }
            return true;
        },
        totalText : 'Al menos un movimiento',
        total     : function(val, field) {
            return store_editor.getCount() > 0;
        }
    });
});
